package org.mch.func.m_px.yunsf;

import java.awt.event.MouseEvent;

import org.mch.biz.ui.BizEvent;
import org.mch.biz.ui.BizPanel;

/**
 * 描述：按位 左移 右移 事件类；<BR/>
 * 
 * @author MCH；<BR/>
 *
 */
public class AnWeiZuoYouYi_Event extends BizEvent {
	private static final long serialVersionUID = -4905870602483644432L;
	private ToolBinaryFBY toolbinary = new ToolBinaryFBY();

	public AnWeiZuoYouYi_Event(BizPanel panel) {
		super(panel);
	}

	@Override
	protected void buttonClicked(MouseEvent e) throws Exception {
		if (e.getSource() == getPanel().getBtn_zuo_yi()) {
			onZuoYi();// 左移
		} else if (e.getSource() == getPanel().getBtn_you_yi()) {
			onYouYi();// 右移
		} else if (e.getSource() == getPanel().getBtn_you_yi_wfh()) {
			onYouYiWfh();// 无符号右移
		} else if (e.getSource() == getPanel().getBtn_clear()) {
			getPanel().getTextArea().setText("");
		} else if (e.getSource() == getPanel().getBtn_js_erjinzhi()) {
			onJiSunErJinZhi();
		} else if (e.getSource() == getPanel().getBtn_weiyi_zuo1()) {
			onWeiYi_ZuoYi_1();// 按位移，左移一位
		} else if (e.getSource() == getPanel().getBtn_weiyi_you1()) {
			onWeiYi_YouYi_1();// 按位移，右移一位
		} else if (e.getSource() == getPanel().getBtn_weiyi_you1_wfh()) {
			onWeiYi_YouYi_1_Wfh();// 按位移，无符号右移一位
		}

	}

	/**
	 * 按位移（二进制），无符号右移一位
	 */
	private void onWeiYi_YouYi_1_Wfh() {
		String alltext = getPanel().getTextArea().getText();
		String wys = null;
		if (tool().isNull(alltext)) {
			wys = getPanel().getText_wys_yuanma().getValue();
		} else {
			wys = alltext.substring(alltext.length() - 32, alltext.length());
		}
		String s = toolbinary.toWfhRightMoveOneBit(wys);
		getPanel().getTextArea().insert((tool().isNull(alltext) ? "" : "\n\n") + s, alltext.length());
	}

	/**
	 * 按位移（二进制），右移一位
	 */
	private void onWeiYi_YouYi_1() {
		String alltext = getPanel().getTextArea().getText();
		String wys = null;
		if (tool().isNull(alltext)) {
			wys = getPanel().getText_wys_yuanma().getValue();
		} else {
			wys = alltext.substring(alltext.length() - 32, alltext.length());
		}
		String s = toolbinary.toRightMoveOneBit(wys);
		getPanel().getTextArea().insert((tool().isNull(alltext) ? "" : "\n\n") + s, alltext.length());
	}

	/**
	 * 按位移（二进制），左移一位
	 */
	private void onWeiYi_ZuoYi_1() {
		String alltext = getPanel().getTextArea().getText();
		String wys = null;
		if (tool().isNull(alltext)) {
			wys = getPanel().getText_wys_yuanma().getValue();
		} else {
			wys = alltext.substring(alltext.length() - 32, alltext.length());
		}
		String s = toolbinary.toLeftMoveOneBit(wys);
		getPanel().getTextArea().insert((tool().isNull(alltext) ? "" : "\n\n") + s, alltext.length());
	}

	private void onJiSunErJinZhi() {
		String wys_str = getPanel().getText_weiyishu().getValue();
		int wys = Integer.parseInt(wys_str);// 位移数
		String wys_ejz = Integer.toBinaryString(wys);
		wys_ejz = wys > 0 ? toolbinary.setMinssBinaryZero(wys_ejz) : wys_ejz;

		getPanel().getText_wys_buma().setValue(wys_ejz);//

		String wys_fanma = toolbinary.byBuMaToFanMa(wys_ejz);
		getPanel().getText_wys_fanma().setValue(wys_fanma);//

		getPanel().getText_wys_yuanma().setValue(toolbinary.byFanMaToYuanMa(wys_fanma));//
	}

	private void onZuoYi() {
		int yiwei = Integer.parseInt(getPanel().getText_yi_wei().getValue());
		String wys_str = getPanel().getText_weiyishu().getValue();
		int wys = Integer.parseInt(wys_str);// 位移数

		getPanel().getText_weiyijieguo().setValue(wys << yiwei);
	}

	private void onYouYi() {
		int yiwei = Integer.parseInt(getPanel().getText_yi_wei().getValue());
		String wys_str = getPanel().getText_weiyishu().getValue();
		int wys = Integer.parseInt(wys_str);// 位移数

		getPanel().getText_weiyijieguo().setValue(wys >> yiwei);
	}

	private void onYouYiWfh() {
		int yiwei = Integer.parseInt(getPanel().getText_yi_wei().getValue());
		String wys_str = getPanel().getText_weiyishu().getValue();
		int wys = Integer.parseInt(wys_str);// 位移数

		getPanel().getText_weiyijieguo().setValue(wys >>> yiwei);
	}

	@Override
	public AnWeiZuoYouYi_Panel getPanel() {
		return (AnWeiZuoYouYi_Panel) super.getPanel();
	}
}
